<?php


namespace app\common\caches;


use think\facade\Cache;

class AnniversaryCache
{
    /**
     * @todo 用户纪念日列表缓存
     * @param int $uid      用户ID
     * @param int $page     查询页码
     * @param int $limit    每页条数
     * @param object $data  列表数据
     * @return bool
     */
    public static function setUserAnniversaryListData(int $uid, int $page, int $limit, object $data)
    {
        return Cache::tag("user:{$uid}.anniversary")
            ->set("user:{$uid}.anniversaries.page:{$page}.limit:{$limit}", $data, 24 * 60 * 60);
    }

    /**
     * @todo 获取用户纪念日列表
     * @param int $uid      用户ID
     * @param int $page     查询页码
     * @param int $limit    每页条数
     * @return mixed
     */
    public static function getUserAnniversaryListData(int $uid, int $page, int $limit)
    {
        return Cache::get("user:{$uid}.anniversaries.page:{$page}.limit:{$limit}") ?? null;
    }

    /**
     * @todo 缓存用户的单条纪念日信息
     * @param int $uid      用户ID
     * @param int $a_id     纪念日ID
     * @param object $data  纪念日数据
     * @return bool
     */
    public static function setUserAnniversaryById(int $uid, int $a_id, object $data)
    {
        return Cache::tag("user:{$uid}.anniversary")
            ->set("user:{$uid}.anniversary:{$a_id}", $data, 24 * 60 *60);
    }

    /**
     * @todo 获取用户的单条纪念日信息
     * @param int $uid      用户ID
     * @param int $a_id     纪念日ID
     * @return mixed
     */
    public static function getUserAnniversaryById(int $uid, int $a_id)
    {
        return Cache::get("user:{$uid}.anniversary:{$a_id}") ?? null;
    }

    /**
     * @todo 缓存用户最近日期的纪念日信息
     * @param int $uid      用户ID
     * @param string $date  查询日期
     * @param array $data   纪念日信息
     * @return bool
     */
    public static function setUserLatestAnniversaries(int $uid, string $date, array $data)
    {
        return Cache::tag("user:{$uid}.anniversary")
            ->set("user:{$uid}.date:{$date}.latest.anniversaries", $data, 24 * 60 * 60);
    }

    /**
     * @todo 查询用户最近日期的纪念日信息
     * @param int $uid      用户ID
     * @param string $date  查询日期
     * @return mixed
     */
    public static function getUserLatestAnniversaries(int $uid, string $date)
    {
        return Cache::get("user:{$uid}.date:{$date}.latest.anniversaries") ?? null;
    }

    /**
     * @todo 清空所有用户相关的纪念日缓存
     * @param int $uid  用户ID
     * @return bool
     */
    public static function flushUserAnniversaryData(int $uid)
    {
        return Cache::tag("user:{$uid}.anniversary")->clear();
    }
}
